home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_09_11 / 9n11022a < prev    next >
Text File  |  1991-08-31  |  2KB  |  73 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define scr_put(line, colm, c)        /* position cursor and write */ \
  5.     printf("\033[%d;%dH%c", line, colm, c)
  6. #define scr_clr() printf("\033[2J")    /* clear screen */
  7.  
  8. void wait(unsigned int seconds);
  9.  
  10. typedef struct node {
  11.     struct node *pfwd;    /* ptr to next node in list */
  12.     unsigned char line;    /* cursor position line */
  13.     unsigned char colm;    /* cursor position column */
  14.     unsigned char ch;    /* char to be displayed */
  15. } Node;
  16.  
  17. main()
  18. {
  19.     Node *proot_node = NULL;/* start of data list */
  20.     Node *pnode;        /* Node just allocated */
  21.     Node *pprev_node;    /* Node previously allocated */
  22.     unsigned int line, colm;
  23.     unsigned char ch;
  24.  
  25. /* get input data pairs until EOF */
  26.  
  27.     while (1) {
  28. /*        printf("Enter line, colm, char: "); */
  29.         if (scanf("%u %u %c", &line, &colm, &ch) == EOF)
  30.             break;
  31.  
  32.         pnode = malloc(sizeof(Node));
  33.         if (pnode == NULL) {
  34.             fprintf(stderr, "Can't malloc Node\n");
  35.             exit(EXIT_FAILURE);
  36.         }
  37.  
  38.         /* update root on first node only */
  39.  
  40.         if (proot_node == NULL)
  41.             proot_node = pnode;
  42.         else
  43.             pprev_node->pfwd = pnode;
  44.  
  45.         pnode->line = line;
  46.         pnode->colm = colm;
  47.         pnode->ch = ch;
  48.         pnode->pfwd = proot_node;
  49.         pprev_node = pnode;
  50.     }
  51.  
  52.  
  53. /* cycle indefinitely through circular list, processing data */
  54.  
  55.     if (proot_node == NULL) {
  56.         fprintf(stderr, "List is empty\n");
  57.         exit(EXIT_FAILURE);
  58.     }
  59.  
  60.     pnode = proot_node;
  61.     while (1) {
  62.         if (pnode == proot_node) {
  63.             wait(5);
  64.             scr_clr();
  65.         }
  66.         scr_put(pnode->line, pnode->colm, pnode->ch);
  67.         pnode = pnode->pfwd;
  68.     }
  69.  
  70.     return(EXIT_SUCCESS);
  71. }
  72.  
  73.